home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NeXTSTEP 3.1 (Developer) [x86]
/
NeXT Step 3.1 Intel dev.cdr.dmg
/
NextDeveloper
/
Examples
/
AppKit
/
Draw
/
graphicsUndo.subproj
/
PerformTextGraphicsChange.m
< prev
next >
Wrap
Text File
|
1992-07-17
|
2KB
|
126 lines
#import "drawundo.h"
@implementation PerformTextGraphicsChange
static id editText = nil;
static id editWindow = nil;
- initGraphic:aGraphic view:aGraphicView
{
[super init];
if (editText == nil) {
editText = [[UndoText alloc] initFrame:(NXRect *)0];
[editText setMonoFont:NO];
}
if (editWindow == nil) {
editWindow = [[Window alloc] init];
}
graphic = aGraphic;
graphicView = aGraphicView;
textChange = nil;
return self;
}
- free
{
[textChange free];
return [super free];
}
- (const char *)changeName
{
return [textChange changeName];
}
- undoChange
{
NXRect bounds;
[self loadGraphic];
[textChange undoChange];
[self unloadGraphic];
[graphic getBounds:&bounds];
[graphicView cache:&bounds];
[[graphicView window] flushWindow];
return [super undoChange];
}
- redoChange
{
NXRect bounds;
[self loadGraphic];
[textChange redoChange];
[self unloadGraphic];
[graphic getBounds:&bounds];
[graphicView cache:&bounds];
[[graphicView window] flushWindow];
return [super redoChange];
}
- (BOOL)incorporateChange:aChange
{
if (textChange == nil) {
textChange = aChange;
return YES;
} else {
return NO;
}
}
- loadGraphic
{
NXRect graphicBounds;
stream = NXOpenMemory([graphic data], [graphic length], NX_READONLY);
[editText readRichText:stream];
NXCloseMemory(stream, NX_SAVEBUFFER);
[graphic getBounds:&graphicBounds];
[editText setFrame:&graphicBounds];
[editWindow setNextResponder:graphicView]; /* so changes can find our */
/* change manager */
[[editWindow contentView] addSubview:editText];
[editText selectAll:self];
return self;
}
- unloadGraphic
{
int length, maxlen;
char *buffer, *data;
[editWindow setNextResponder:nil];
[editText removeFromSuperview];
[editText setSel:0 :0];
[graphic setFont:[editText font]];
stream = NXOpenMemory(NULL, 0, NX_WRITEONLY);
[editText writeRichText:stream];
NXGetMemoryBuffer(stream, &buffer, &length, &maxlen);
NX_ZONEMALLOC([graphic zone], data, char, length);
bcopy(buffer, data, length);
NXCloseMemory(stream, NX_FREEBUFFER);
[graphic setData:data];
[graphic setLength:length];
return self;
}
- editText
{
return editText;
}
@end